#pragma once

#include <string>
#include "glm/glm.hpp"

struct ShaderProgramSource {
	std::string VertexSource;
	std::string FragmentSource;
};

class Shader{
private:
	unsigned int m_RendererID;
	std::string m_ShaderPath;
public:
	Shader(const std::string& filePath);
	~Shader();
	void Bind() const;
	void Unbind() const;
	ShaderProgramSource ParseSharder(const std::string& filePath);
	unsigned int CreateSharder(const std::string& vertexSource, const std::string& fragmentSource);
	unsigned int CompileSharder(unsigned int type, const std::string& source);
	void SetUniform1i(const std::string& name, int value);
	void SetUniform4f(const std::string& name, float v0, float v1, float v2, float v3);
	void SetUniformMat4f(const std::string& name, const glm::mat4& matrix);


	int  GetUniformLocation(const std::string& name);
};